package state

import (
	"strings"
)

// Mode 设备运行模式
type Mode uint8

const (
	ModeNone        Mode = 0 // 停机状态 (0000 0000)
	ModeAuto        Mode = 1 // 自动模式 (0000 0001)
	ModeForceHeat   Mode = 2 // 强制加热模式 (0000 0010)
	ModeForcePump   Mode = 4 // 强制泵模式   (0000 0100)
	ModeExitingAuto Mode = 8 // 退出自动模式中 (0000 1000)
)

// HasMode 检查是否包含指定模式
func (m Mode) HasMode(mode Mode) bool {
	if mode == ModeNone {
		return m == ModeNone
	}
	if mode == ModeAuto {
		return m == ModeAuto
	}
	if mode == ModeExitingAuto {
		return m == ModeExitingAuto
	}
	return m&mode != 0
}

// String 返回模式的字符串表示
func (m Mode) String() string {
	if m == ModeNone {
		return "停止"
	}
	if m == ModeAuto {
		return "自动模式"
	}
	if m == ModeExitingAuto {
		return "退出自动模式中"
	}

	var modes []string
	if m&ModeForceHeat != 0 {
		modes = append(modes, "强制加热模式")
	}
	if m&ModeForcePump != 0 {
		modes = append(modes, "强制泵模式")
	}
	if len(modes) == 0 {
		return "未知模式"
	}
	return strings.Join(modes, "+")
}
